package com.ruoyi.project.cms.type.service;

import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.utils.security.ShiroUtils;
import com.ruoyi.common.utils.text.Convert;
import com.ruoyi.project.cms.content.service.ICmsContentService;
import com.ruoyi.project.cms.type.domain.Type;
import com.ruoyi.project.cms.type.mapper.CmsTypeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * @author 黄药师
 * @date 2021-01-30 9:35
 * @desc 巨梯学院 http://www.jutixueyuan.com
 */
@Service
public class CmsTypeServiceImpl implements ICmsTypeService{

    @Autowired
    private CmsTypeMapper cmsTypeMapper;

    @Autowired
    private ICmsContentService cmsContentService;

    @Override
    public List<Type> selectTypeList(Type type) {

        return cmsTypeMapper.selectTypeList(type);
    }

    @Override
    public String checktypenameunique(Type type) {
        
        // 校验
        String typeName = type.getTypeName();
        //查询数据 判断type是否存在
        Type typeInfo = cmsTypeMapper.selectTypeByTypeName(typeName);
        System.out.println("typeInfo = " + typeInfo);

////        // 如果你页面传递过来啊typeId = 5
        Long typeId = Objects.isNull(type.getTypeId()) ? -1L:type.getTypeId();
//
////        // 查询数据库的结果是 5 修改的时候名称可以使用
////        Long typeId = typeInfo.getTypeId();  是通过一个
//        // typeId.equals(typeInfo.getTypeId()) 如果结果为true 修改的type是通一个
//        // 可以使用typeName 返回 0
        Long typeInfoType = -2L;
        if (typeInfo != null){
             typeInfoType = typeInfo.getTypeId();
        }
        if (Objects.isNull(typeInfo)){
            //数据库中不存在 Type
            // 添加的typeName 是唯一性 返回  0
//            return UserConstants.USER_NAME_UNIQUE;
            return "0";
        }
        // 是修改的时候 进行判断 是否是同一个type
        if (typeInfoType.equals(typeId)){
            return "0";
        }

        return "1";
    }

    @Override
    public int insertType(Type type) {
        // 设置那个登录创建添加的 type
        type.setCreateBy(ShiroUtils.getLoginName());

        return cmsTypeMapper.insertType(type);
    }

    /**
     * 通过id查询 type
     * @param typeId
     * @return
     */
    @Override
    public Type selectTypeById(Integer typeId) {
        return cmsTypeMapper.selectTypeById(typeId);
    }

    @Override
    public int updatetype(Type type) {

        type.setUpdateBy(ShiroUtils.getLoginName());
        int row = cmsTypeMapper.updatetype(type);

        return row;
    }

    @Override
    public int deleteTypeByIds(String ids) {

        boolean delFlag = false;

        // ids 转成一个一个数组
        Long[] typeIds = Convert.toLongArray(ids);

        Type typeInfo = null;
        // 需要判断 删除typeid 的时候 这个typeId的数据是否有引用
        for (int i = 0; i < typeIds.length; i++) {
            Long typeId = typeIds[i];
            int count = cmsContentService.selectContentCountByTypeId(typeId);

            // typeId 这个数据有引用 不能删除
            if (count > 0){

                typeInfo = cmsTypeMapper.selectTypeById(typeId.intValue());
                //标记不能删除
                delFlag = true;
                break;
            }
        }
        String typeName = "";
        if (delFlag){

            if (!Objects.isNull(typeInfo)){
                typeName = typeInfo.getTypeName();
            }

            throw new RuntimeException(typeName + "的数据在其他地方有引用,不能删除...");
        }
        return cmsTypeMapper.deleteTypeByIds(typeIds);
    }
}
